草庐IT

C++ STL : Custom sorting one vector based on contents of another

全部标签

c++ - STL 容器速度与数组

我刚刚开始从事一个速度非常重要的科学项目(HPC)。我目前正在设计数据结构。该项目的核心是双值的3D网格,用于求解偏微分方程。由于这里的速度可能比代码的简单性更受关注,我想知道与通常的C样式数组相比,STL的性能如何。在我的例子中,因为它是一个3D网格,我正在考虑a)一个具有线性索引的一维vectorb)一个包含3个vector的vector或c)一维c型数组或d)一个三维c型数组。我查找了较早的问题,但我只发现了有关构造/破坏的问题(这在这里并不重要,因为数据结构仅在程序启动时创建一次-快速索引和计算很重要)或不同STL的比较容器。感谢帮助 最佳答案

c++ - 一种使用 STL 计算 std::string vector 中字符的方法?

虽然查找std::stringvector中的字符数量很简单,但我想知道是否有办法使用STL为您完成所有工作,而不是使用两个for循环,一个循环遍历vector,另一个循环遍历vector每个索引中的字符串。我尝试过使用其他STL函数(例如尝试以几种独特的方式使用std::for_each),但我所有的尝试都没有成功。intmain(void){intchars=0;std::vectorstr;str.push_back("Vector");str.push_back("of");str.push_back("four");str.push_back("words");for(int

C++ STL精通之旅:向量、集合与映射等容器详解

目录常用容器顺序容器向量vector构造尾接&尾删中括号运算符获取长度清空判空改变长度提前分配好空间代码演示运行结果关联容器集合set构造遍历其他代码演示运行结果​编辑映射map常用方法构造遍历其他代码演示1​编辑运行结果1代码演示2运行结果2 stringmap 代码演示3运行结果3 mp没赋初值,默认为0代码演示4运行结果4容器适配器栈stack常用方法代码演示1运行结果1vector也可以当栈来用代码演示2运行结果2队列queue常用方法代码演示运行结果优先队列priority_queue常用方法构造其他大顶堆代码演示1运行结果1 小顶堆代码演示2运行结果2修改堆顶元素代码演示3 运行结

c++ - 为什么 C++ STL 容器使用 "less than"operator< 而不是 "equal equal"operator== 作为比较器?

在std::map的自定义类中实现比较运算符时,我遇到了这个问题,但看不到任何被问到的地方。除了上述问题,也有兴趣简要了解,如何operator适用于std::map.问题来源:structAddress{longm_IPv4Address;boolisTCP;booloperator 最佳答案 std::map需要能够排序。默认情况下使用std::less,对于非指针使用1。使用您对用户的要求最少的规则,它从综合“等价”当它需要它时(!(a表示a和b是等价的,即两者都不小于另一个)。这使得编写用作map的关键组件的类变得更加容易,

c++ - "stable_sort()ing"C++ 中的 STL <列表>

我认为问题标题已经足够清楚了:是否可以在C++中对std::list进行stable_sort()?或者我必须将它转换为std::vector吗?我问是因为我尝试了一个简单的例子,它似乎需要RandomAccessIterators,而链表没有。那么,如何对std::list()进行稳定排序?编辑:给我一个错误的示例代码:#include#include//...listthe_list;stable_sort(the_list.begin(),the_list.end());g++给我大约30行错误(太长而无法粘贴),其中一些错误涉及RandomAccessIterators(以及称

c++ - STL变化大吗?

我想熟悉标准模板库的使用。如果我看到1995-97年左右出版的一般引用或初学者指南,我可以依赖其中的信息吗?在过去的十几年里,STL发生了多大的变化? 最佳答案 是的!有新的补充。TR1更新现已在大多数环境中实现。您的旧书对于学习基础知识仍然很有用。但是您会希望找到TR1的引用资料以了解一些非常有用的新功能。在几个方面,新功能优于旧功能。(想到的是bind1st和bind2nd功能完全封装在更通用的绑定(bind)结构中。)此外,还有boost库。(boost.org)Boost是一个库的集合,有些非常有用,有些则晦涩难懂。TR1中

c++ - 成员变量和STL算法

#include#include#includeusingnamespacestd;structFoo{inti;doubled;Foo(inti,doubled):i(i),d(d){}intgetI()const{returni;}};intmain(){vectorv;v.push_back(Foo(1,2.0));v.push_back(Foo(5,3.0));vectoris;transform(v.begin(),v.end(),back_inserter(is),mem_fun_ref(&Foo::getI));return0;}有没有更简洁的方法来访问成员变量然后使用我

c++ - 使用 not2 时将 struct vs class 作为 STL 仿函数

学习STL我写了一个简单的程序来测试仿函数和修饰符。我的问题是关于使用CLASS或STRUCT编写仿函数并尝试使用函数适配器对其进行操作的区别。据我在C++中的理解,CLASS和STRUCT之间的区别在于,在最后一种情况下,默认情况下成员是公共(public)的。这也是我在该站点的答案中多次阅读的内容。所以请解释为什么即使我在尝试使用not2修饰符时将所有成员(只是一个函数重载())声明为public,这段短代码也会编译失败。(我还没有尝试过其他修饰符,例如粘合剂)#include#include#include#includeusingnamespacestd;templatevoi

c++ - STL 迭代器和 'const'

当我使用迭代器时,我遇到了一个问题,似乎是对const的某种隐式转换。我不太确定哪个代码是相关的(如果我知道我可能不会问这个问题!)所以我会尽力说明我的问题。typedefsetContainer;//notconstvoidLargeObject::someFunction(){//notconstContainer::iteratorit;//notconstfor(it=c.begin();it!=c.end();++it){//assumecisa"Container"(*it).smallObjectFunction();//notaconstfunction}}但是我总是得

c++ - 为什么我应该将 C++ 运算符重载为全局函数(STL 这样做),注意事项是什么?

为什么我要将C++operator()重载为全局函数而不是成员函数。例如,==运算符。为什么要这样做?例如在STL库中。 最佳答案 通常的规则是将左侧对象修改为成员和返回新对象的二元运算符是免费的职能;后者的主要动机是因为编译器不会转换左侧以匹配成员;如果你的类(class)支持任何隐式转换,然后是所有常见的二进制运算符应该是自由函数,以便应用相同的转换规则对于左侧和右侧,例如:classComplex{public:Complex(doubler,doublei=0.0);booloperator==(Complexconst&o